#include "shun.h"

data niu[5] = // 结构体定义
    {
        {1001, "唐三", 'N', 92},
        {1002, "萧炎", 'N', 98},
        {1003, "叶晨", 'N', 83},
        {1004, "小舞儿", 'M', 59},
        {1005, "萧熏儿", 'M', 79},
};

FILE *file_open(const char *path, const char *mode) // 打开文件
{
    FILE *fp = fopen(path, mode);
    if (NULL == fp)
    {
        printf("文件创建失败\n");
        exit(-1);
    }
    return fp;
}

int file_close(FILE **fp) // 关闭文件
{
    fclose(*fp);
    *fp = NULL;
}

void listkong(list *L) // 创建一个 班级 将len 等于 0
{
    L->len = 0;
}

void listchushi(list *L) // 初始化
{
    listkong(L);
    for (int i = 0; i < 5; i++)
    {
        L->student[i] = niu[i];
        L->len++;
    }
    return;
}

void wenna(list *L) // 把文件里面的东西拿出来
{
    FILE *fp = file_open("hhh.txt", "r+");
    // data tes[L->len];
    for (int i = 0; i < L->len; i++)
    {
        fscanf(fp, "学号：%d\t姓名:%s\t性别:%c\t成绩:%d\n", &L->student[i].id, L->student[i].name, &L->student[i].sex, &L->student[i].sco);
    }
}

void wenxie(list *L) // 文件写入
{
    FILE *fp = file_open("hhh.txt", "w");
    for (int i = 0; i < L->len; i++)
    {
        fprintf(fp, "学号：%d\t姓名：%s\t性别：%c\t成绩：%d\n", L->student[i].id, L->student[i].name, L->student[i].sex, L->student[i].sco);
    }
    file_close(&fp);
}

void wenshu(list *L) // 文件向终端输出
{
    FILE *fp = file_open("hhh.txt", "r+");
    for (int i = 0; i < L->len; i++)
    {
        printf("学号：%d\t姓名：%s\t性别：%c\t成绩：%d\n", L->student[i].id, L->student[i].name, L->student[i].sex, L->student[i].sco);
    }
    file_close(&fp);
}

void wenpaixu(list *L) // 链表排序
{
    //=========  读取数据存入链表空间  =========
    FILE *fp = file_open("hhh.txt", "r+");
    wenna(L);
    //=========  排序小到大  =========
    for (int i = 0; i < L->len - 1; i++)
    {
        for (int j = 0; j < L->len - 1 - i; j++)
        {
            if (L->student[j].sco > L->student[j + 1].sco)
            {
                data t = L->student[j];
                L->student[j] = L->student[j + 1];
                L->student[j + 1] = t;
            }
        }
    }
    file_close(&fp);

    wenxie(L);
}

void wenzen(list *L) // 文件的增加
{
    printf("请输入需要增加的学号：\n");
    scanf("%d", &L->student[L->len].id);
    while (getchar() != '\n')
        ;
    printf("请输入需要增加的名字：\n");
    scanf("%s", L->student[L->len].name);
    while (getchar() != '\n')
        ;
    printf("请输入需要增加的性别：\n");
    scanf("%c", &L->student[L->len].sex);
    while (getchar() != '\n')
        ;
    printf("请输入需要增加的成绩：\n");
    scanf("%d", &L->student[L->len].sco);
    while (getchar() != '\n')
        ;

    L->len++;
    printf("修改成功！修改后的内容遍历为：\n");
    wenshu(L);
}

void wenshan(list *L) // 文件的删除
{
    printf("请输入需要删除的名字\n");
    char name_1[20];
    while (1)
    {
        int flag = 0;
        scanf("%s", name_1);
        for (int i = 0; i < L->len; i++)
        {
            if (strcmp(L->student[i].name, name_1) == 0)
            {
                flag = 1;
                for (int j = i; j < L->len - 1; j++)
                {
                    L->student[j] = L->student[j + 1];
                }
                L->len--;
                printf("给学生%s删除成功！\n", name_1);
                printf("修改成功！修改后的内容遍历为：\n");
                wenshu(L);
                return;
            }
        }
        if (flag == 0)
        {
            printf("没有这个人！请重新输入：\n");
            continue;
        }
    }
}

void wengai(list *L) // 文件的修改
{
    int ce;
    char name_2[20];
    printf("请输入你想修改的人\n");
    while (1)
    {
        int flag = 0;
        scanf("%s", name_2);
        for (int i = 0; i < L->len; i++)
        {
            if (strcmp(L->student[i].name, name_2) == 0)
            {
                flag = 1;
                break;
            }
        }
        if (flag == 0)
        {
            printf("没有这个人！请重新输入：\n");
            continue;
        }
        else
        {
            break;
        }
    }
    printf("请输入需要修改的成绩：\n");
    scanf("%d", &ce);
    while (getchar() != '\n')
        ;
    for (int i = 0; i < L->len; i++)
    {
        if (strcmp(L->student[i].name, name_2) == 0)
        {
            L->student[i].sco = ce;
            break;
        }
    }
    printf("修改成功！修改后的内容遍历为：\n");
    wenshu(L);
}

void wencha(list *L) // 文件的查看
{
    printf("请输入需要查看的名字\n");
    char name_3[20];
    while (1)
    {
        int flag = 0;
        scanf("%s", name_3);
        for (int i = 0; i < L->len; i++)
        {
            if (strcmp(L->student[i].name, name_3) == 0)
            {
                flag = 1;
                printf("学号：%d\t姓名：%s\t性别：%c\t成绩：%d\n", L->student[i].id, L->student[i].name, L->student[i].sex, L->student[i].sco);
                return;
            }
        }
        if (flag == 0)
        {
            printf("没有这个人！请重新输入：\n");
            continue;
        }
    }
}